const fs = require('fs')
const { AVATAR_PATH, WALL_PATH } = require('../app/file-path')
const userService = require('../service/user.service')
const fileService = require('../service/file.service')
const wrapper = require('../wrapper')

class UserController {

  // 创建用户
  async create(ctx) {
    try {
      // 1.获取用户的参数
      const user = ctx.request.body
      // 2.检测/插入数据
      const result = await userService.create(user)
      // 3.返回数据
      ctx.body = wrapper.wrapTo200(result)
    } catch (error) {
      ctx.body = wrapper.wrapTo500(null, "创建用户失败")
    }
  }

  // 获取用户数据
  async getUserData(ctx) {
    try {
      // 1.获取用户数据
      const { userId } = ctx.query
      // 2.查询数据
      const result = await userService.getUserData(userId)
      // 3.返回数据
      ctx.body = wrapper.wrapTo200(result)
    } catch (error) {
      ctx.body = wrapper.wrapTo500(null, "获取用户数据失败")
    }
  }

  // 获取用户详情
  async getUserDesc(ctx) {
    try {
      // 1.获取用户数据
      const { userId } = ctx.query
      // 2.查询数据
      const result = await userService.getUserDesc(userId)
      // 3.返回数据
      ctx.body = wrapper.wrapTo200(result)
    } catch (error) {
      ctx.body = wrapper.wrapTo500(null, "获取用户详情失败")
    }
  }

  // 获取全部用户数据
  async getUserProfile(ctx) {
    try {
      // 1.获取用户数据
      const { userId } = ctx.query
      // 2.查询数据
      const result = await userService.getUserProfile(userId)
      // 3.返回数据
      ctx.body = wrapper.wrapTo200(result)
    } catch (error) {
      ctx.body = wrapper.wrapTo500(null, "获取全部用户数据失败")
    }
  }

  // 更新密码
  async updatePassword(ctx) {
    try {
      // 1.获取用户数据
      const { id, password } = ctx.user
      // 2.操作数据
      const result = await userService.updatePassword(id, password)
      // 3.返回数据
      ctx.body = wrapper.wrapTo200(result)
    } catch (error) {
      ctx.body = wrapper.wrapTo500(null, "更新密码失败")
    }
  }

  // 获取用户头像
  async avatarInfo(ctx, next) {
    try {
      // 1.获取参数
      const { userId } = ctx.params
      // 2.查询数据
      const result = await fileService.getAvatarByUserId(userId)
      // 3.返回头像
      ctx.response.set('content-type', result.mimetype)
      ctx.body = fs.createReadStream(`${AVATAR_PATH}/${result.filename}`)
    } catch (error) {
      ctx.body = wrapper.wrapTo500(null, "获取用户头像失败")
    }
  }

  // 获取用户壁纸
  async wallInfo(ctx, next) {
    try {
      // 1.获取参数
      const { userId } = ctx.params
      // 2.查询数据
      const result = await fileService.getWallByUserId(userId)
      // 3.返回头像
      ctx.response.set('content-type', result.mimetype)
      ctx.body = fs.createReadStream(`${WALL_PATH}/${result.filename}`)
    } catch (error) {
      ctx.body = wrapper.wrapTo500(null, "获取用户壁纸失败")
    }
  }

  // 修改用户名
  async updateNickname(ctx, next) {
    try {
      // 1.获取参数
      const { id } = ctx.user
      const { nickname } = ctx.request.body
      // 2.查询数据
      const result = await userService.updateNickname(id, nickname)
      // 3.返回结果
      ctx.body = wrapper.wrapTo200(result)
    } catch (error) {
      ctx.body = wrapper.wrapTo500(null, "更新用户名失败")
    }
  }

  // 修改用户详情
  async updateUserDesc(ctx, next) {
    try {
      // 1.获取参数
      const { id } = ctx.user
      const userDesc = ctx.request.body
      // 2.查询数据
      const result = await userService.updateUserDesc(id, userDesc)
      // 3.返回结果
      ctx.body = wrapper.wrapTo200(result)
    } catch (error) {
      ctx.body = wrapper.wrapTo500(null, "更新用户详情失败")
    }
  }

  // 修改用户数据
  async updateUserData(ctx, next) {
    try {
      // 1.获取参数
      const userData = ctx.request.body
      // 2.查询数据
      const result = await userService.updateUserData(userData)
      // 3.返回结果
      ctx.body = wrapper.wrapTo200(result)
    } catch (error) {
      ctx.body = wrapper.wrapTo500(null, "更新用户数据失败")
    }
  }

}

module.exports = new UserController()
